'''
Created on 21/09/2013

@author: Hugo sama
'''
import unittest

from InvertedIndex import InvertedIndex
class TestInvertedIndex(unittest.TestCase):
    index = InvertedIndex()
    
    def test_add_words_and_posting_to_index(self):
        tokens = ["uno","dos","tres"]
        tokens2 = ["cuatro","cinco","seis","tres"]
        document = "documento.txt"
        document2 = "documento2.txt"
        docID = self.index.addWordsDocument(tokens,document)
        self.assertTrue(docID == 0, "No esta agregando los documentos en orden")
        docID = self.index.addWordsDocument(tokens,document)
        docID = self.index.addWordsDocument(tokens,document)
        self.assertTrue(docID < 1, "El mismo documento no puede tener 2 ID diferentes")
        self.assertTrue(len(self.index.docList) == 1, "El mismo documento no debe ser agregado 2 veces")
        docID2 = self.index.addWordsDocument(tokens2,document2)
        self.assertTrue(docID2 == 1, "No esta agregando en orden")
    
    def test_get_documents_with_words(self):
        documents = self.index.getDocumentsWithWords(["tres"])
        self.assertTrue(set(documents) == set([0,1]), "No hace bien la interseccion")
        documents = self.index.getDocumentsWithWords(["tres","cuatro"])
        self.assertTrue(set(documents) == set([1]), "No hace bien la interseccion")
        
    def test_get_intersection(self):
        list1 = [0,2,3]
        list2 = [3,4,5]
        intersection = self.index.getIntersection(list1, list2)
        self.assertEqual([3], intersection, "No hace bien la interseccion")
    
    def test_get_disjuntion(self):
        list1 = [0,2,3]
        list2 = [3,4,5]
        disjunction = self.index.getDisjunction(list1, list2)
        self.assertEqual([0,2,3,4,5], disjunction , "No hace bien la disyuncion")
    
    def test_negation(self):
        doc = [1]
        negation = self.index.getNegation(doc)
        self.assertEqual([0], negation, "No hace bien la negacion")
    
    def test_get_document_names(self):
        docIDs = [0,1]
        documents = self.index.getDocumentsNames(docIDs)
        self.assertEqual(documents, ['documento.txt','documento2.txt'], "No devuelve los nombres correctamente")
        
if __name__ == '__main__':
    unittest.main()